When designing a small system with few inputs and few variables, the design space is small. For example, a system with only three Boolean variables allows for only eight total combinations (2n). For a design space that expands to ten Boolean variables, the total combinations expand to 1024 combinations. For a complex piece of machinery, such as a turbine, the total combinations may reach the millions or more. As the number of combinations increase, the ability to automatically generate architecture designs for each and every feasible combination becomes prohibitive.
One technique for modeling systems is to use computational design synthesis to generate solutions and architectures. Computational design synthesis uses logic and algorithms to quickly generate multiple design architectures. Two different computational approaches are used, grammar based and declarative. Grammar based methods capture a designer's knowledge (e.g., from design catalogues, textbooks, or standards) in engineering design grammar, so that the knowledge may be used to generate solutions. Declarative based methods use object-oriented declarative configuration languages, in which logical constraints of a system may be specified.
Depending on the problem, the approaches may both have issues. A generative approach using graph grammars may generate many solutions quickly, however the generated solutions may be of low quality as the majority of architectures are not useable. The ratio of useable versus not useable architectures drops quickly when considering realistic problems, making a generative approach inefficient. A declarative approach using first-order logic is more explicit about the constraints of the design under consideration. The drawback for a declarative approach is that the time to solution is extremely high when considering complex problems. Using the declarative approach on a design problem may take days if not longer to generate architectures. As designs grow, the time to solution rises exponentially, not linearly, further requiring additional processing time and resources.
To tackle the exponential growth problem with computational design, design space decisions are often made early in the process to eliminate swaths of combinations. At this point, the impact of eliminating the combinations and how the combinations are related to later design decisions is unclear. For example, when designing a hybrid-drive train, the decision of which storage technology is used has a tremendous impact of the overall performance. Unfortunately, the evaluation may only be made after all decisions are made and one design is fixed. To create feasible design spaces, best practices may be used. Best practices, or those decisions based on prior performance, may lead to common and known solutions that leads to design fixation and a lack of innovation.